//
//  ZQQSqliteModelTool.h
//  sqlite的封装
//
//  Created by MoDao-iOS on 2017/7/24.
//  Copyright © 2017年 MoDao-iOS. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "ZQQModeProtocol.h"


typedef NS_ENUM(NSUInteger, SqlExpressionRelationType) {
    SqlExpressionRelationTypeMore,      // >
    SqlExpressionRelationTypeLess,      // <
    SqlExpressionRelationTypeEqual,     // =
    SqlExpressionRelationTypeMoreEqual, // >=
    SqlExpressionRelationTypeLessEqual, // <=
    SqlExpressionRelationTypeNotEqual   // !=
};

/** 逻辑运算符 */
typedef NS_ENUM(NSUInteger, ZQQSqliteModeToolNAO) {
    ZQQSqliteModeToolNAONot,    // not
    ZQQSqliteModeToolNAOAnd,    // and
    ZQQSqliteModeToolNAOOr      // or
};

@interface ZQQSqliteModelTool : NSObject

/**
 根据一个模型类, 创建数据库表
 
 @param cls 类名
 @param uid 用户唯一标识
 @return 是否创建成功
 */
+ (BOOL)createTable:(Class)cls uid:(NSString *)uid;

/**
 判断一个表格是否需要更新
 
 @param cls 类名
 @param uid 用户唯一标识
 @return 是否需要更新
 */
+ (BOOL)isTableRequiredUpdate:(Class)cls uid:(NSString *)uid;

/**
 更新表格
 
 @param cls 类名
 @param uid 用户唯一标识
 @return 是否更新成功
 */
+ (BOOL)updateTable:(Class)cls uid:(NSString *)uid;


/**
 保存或者更新表格

 @param model 所需的模型
 @param uid uid
 @return 返回是否操作成功
 */
+ (BOOL)saveOrUpdateModel:(id)model uid:(NSString *)uid;


/**
 根据模型删除

 @param model model
 @param uid uid
 @return 是否删除成功
 */
+ (BOOL)deleteModel:(id)model uid:(NSString *)uid;

/**
 根据条件来删除

 @param cls 数据模型类
 @param whereStr 删除条件
 @param uid 用户唯一标识
 @return 是否删除成功
 */
+ (BOOL)deleteModel:(Class)cls whereStr:(NSString *)whereStr uid:(NSString *)uid;


/**
 根据条件来删除

 @param cls 数据模型类
 @param name 条件的name
 @param relation 设置关系
 @param value 条件的name值
 @param uid 用户唯一的标识
 @return 是否删除成功
 */
+ (BOOL)deleteModel:(Class)cls columnName:(NSString *)name relation:(SqlExpressionRelationType)relation value:(id)value uid:(NSString *)uid;


/**
 多条件删除

 @param cls 数据模型类
 @param keys 关系的键
 @param relations 关系（与键对应）
 @param values 关系的值（与键对应）
 @param naos 每个条件间的关系
 @param uid 用户唯一标识
 @return 是否删除成功
 */
+ (BOOL)deleteModel:(Class)cls keys: (NSArray *)keys relations: (NSArray *)relations values: (NSArray *)values nao: (NSArray *)naos uid: (NSString *)uid;


/**
 查询所有的数据模型

 @param cls 数据模型类
 @param uid 用户唯一标识
 @return 查询结果
 */
+ (NSArray *)queryAllModels:(Class)cls uid:(NSString *)uid;

/**
 根据单个条件查询

 @param cls 数据模型类
 @param name 条件名称
 @param relation 关系
 @param value 条件的值
 @param uid 用户唯一标识
 @return 查询结果
 */
+ (NSArray *)queryModels:(Class)cls columnName:(NSString *)name relation:(SqlExpressionRelationType)relation value:(id)value uid:(NSString *)uid;

/**
 多条件查询

 @param cls 数据模型类
 @param keys 条件的名称数组
 @param relations 关系数组
 @param values 值数组
 @param naos 每个条件间的关系
 @param uid 用户唯一标识
 @return 查询结果
 */
+ (NSArray *)queryModels:(Class)cls keys: (NSArray *)keys relations: (NSArray *)relations values: (NSArray *)values nao: (NSArray *)naos uid: (NSString *)uid;

/**
 根据sql语句查询

 @param cls 数据模型类
 @param sql SQL语句
 @param uid 用户唯一标识
 @return 查询结果
 */
+ (NSArray *)queryModels:(Class)cls sql: (NSString *)sql uid: (NSString *)uid;

@end
